package com.fac.controller.admin;

import com.fac.dto.RoleCreateDTO;
import com.fac.dto.RolePageQueryDTO;
import com.fac.dto.RoleUpdateDTO;
import com.fac.entity.Role;
import com.fac.result.PageResult;
import com.fac.result.Result;
import com.fac.service.RoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

/**
 * 角色管理控制器
 */
@RestController
@RequestMapping("/admin/roles")
@Api(tags = "管理端-角色管理相关接口")
@Slf4j
public class RoleController {

    @Autowired
    private RoleService roleService;

    /**
     * 创建角色
     *
     * @param roleCreateDTO 角色创建DTO
     * @return 创建结果
     */
    @PostMapping
    @ApiOperation("创建角色")
    @ResponseStatus(HttpStatus.CREATED)
    public Result<Role> create(@RequestBody RoleCreateDTO roleCreateDTO) {
        log.info("创建角色：{}", roleCreateDTO);
        Role role = roleService.create(roleCreateDTO);
        return Result.success(role);
    }

    /**
     * 分页查询角色
     *
     * @param rolePageQueryDTO 分页查询条件
     * @return 分页结果
     */
    @GetMapping
    @ApiOperation("分页查询角色")
    public Result<PageResult> page(RolePageQueryDTO rolePageQueryDTO) {
        log.info("分页查询角色：{}", rolePageQueryDTO);
        PageResult pageResult = roleService.pageQuery(rolePageQueryDTO);
        return Result.success(pageResult);
    }

    /**
     * 更新角色
     *
     * @param roleUpdateDTO 角色更新DTO
     * @return 更新结果
     */
    @PutMapping
    @ApiOperation("更新角色")
    public Result<Role> update(@RequestBody RoleUpdateDTO roleUpdateDTO) {
        log.info("更新角色：{}", roleUpdateDTO);
        Role role = roleService.update(roleUpdateDTO);
        return Result.success(role);
    }

    /**
     * 删除角色
     *
     * @param roleId 角色ID
     * @return 删除结果
     */
    @DeleteMapping("/{roleId}")
    @ApiOperation("删除角色")
    public Result<String> delete(@PathVariable Long roleId) {
        log.info("删除角色：{}", roleId);
        roleService.delete(roleId);
        return Result.success();
    }
} 